package heima_design.model07;
/**
 * @ClassName: Singleton
 * @Description: 懒汉式-方式4（静态内部类方式）
 * @Version: v1.0.0
 * @Author: tamir
 * @Date: 2022/06/02
 * Modification History:
 * Date             Author      Version     Description
 * -------------------------------------------------------------
 * 2022/06/02      tamir        v1.0.0      创建
 */
public class Singleton {
	private Singleton(){}
	
	private static class SingletonHolder{
		private static final Singleton INSTANCE = new Singleton();
	}
	
	public static Singleton getInstance(){
		return SingletonHolder.INSTANCE;
	}
	//静态内部类单例模式中实例由内部类创建，由于 JVM 在加载外部类的过程中, 是不会加载静态内部类的,
	// 只有内部类的属性/方法被调用时才会被加载, 并初始化其静态属性。静态属性由于被 `static` 修饰，保证只被实例化一次，并且严格保证实例化顺序。
	
	//第一次加载Singleton类时不会去初始化INSTANCE，只有第一次调用getInstance，虚拟机加载SingletonHolder
	//并初始化INSTANCE，这样不仅能确保线程安全，也能保证 Singleton 类的唯一性。
}
